home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-06 / burst.zip / BURST.TXT < prev   
Text File  |  1992-06-29  |  50KB  |  1,089 lines

  1.  
  2.                                                                  ▄
  3.                An Introduction to Novell's Burst Mode Protocol   █
  4.                                                                  █
  5.              ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  6.  
  7.                                 Dave Stevenson
  8.                          Manager, Systems Engineering
  9.                         Systems Engineering Department
  10.  
  11.                                 Sandra Duncan
  12.                              Software Engineering
  13.                             NetWare Systems Group
  14.  
  15.                ╔═════════════════════════════════════════════╗
  16.                ║      PgDn to Scroll or follow link for      ║
  17.                ║            Table of Contents               ║
  18.                ╚═════════════════════════════════════════════╝
  19.  
  20.      This Application Note introduces Burst Mode, a new technology that
  21.      employs enhancements to the NetWare Core Protocol. Burst Mode, which is
  22.      built on top of IPX, was developed explicitly to improve NetWare's
  23.      performance when transferring large files over wide area networks. The
  24.      AppNote defines how the Burst Mode protocol works and reports on the
  25.      results of some real-world performance testing. It also includes
  26.      technical information on Burst Mode packet structures.
  27.  
  28.      Copyright (c) 1992 by Novell, Inc., Provo, Utah. All rights reserved.
  29.  
  30.      No part of this document may be reproduced, stored in a retrieval system,
  31.      or transmitted in any form or by any means, electronic, mechanical,
  32.      photocopying, recording, or otherwise, without express written permission
  33.      from Novell, Inc.
  34.  
  35.      Disclaimer
  36.  
  37.      Novell, Inc. makes no representations or warranties with respect to the
  38.      contents or use of these Application Notes (AppNotes) or of any of the
  39.      third-party products discussed in the AppNotes. Novell reserves the right
  40.      to revise these AppNotes and to make changes in their content at any
  41.      time, without obligation to notify any person or entity of such revisions
  42.      or changes. These AppNotes do not constitute an endorsement of the
  43.      third-party product or products that were tested. Configuration(s) tested
  44.      or described may or may not be the only available solution. Any test is
  45.      not a determination of product quality or correctness, nor does it ensure
  46.      compliance with any federal, state, or local requirements. Novell does
  47.      not warranty products except as stated in applicable Novell product
  48.      warranties or license agreements.
  49.  
  50. Contents
  51.  
  52.       Overview
  53.            Traditional NCP Interaction Using IPX
  54.            The Burst Mode Protocol
  55.            Flow Control Mechanism
  56.            Bad Packet Retransmission
  57.       Burst Mode Theory
  58.            Write and Read Requests
  59.                 Write Requests
  60.                 Read Requests
  61.            System Information
  62.            Setting Up a Burst Mode Connection
  63.            The Transmission Rate Control Algorithm
  64.            How the Algorithm Works
  65.            Setting the Number of Burst Mode Buffers
  66.            Client Memory Requirements
  67.            Determining Minimum and Maximum Window Size
  68.            Network Timeouts
  69.       Performance Implications
  70.            Performance Testing
  71.            Performance Test Results
  72.       Appendix A: Technical Information
  73.       Burst Packet Structure
  74.            Burst Header Structure
  75.            Missing Fragment List
  76.            Request Data
  77.       Request and Reply Structures
  78.            Big File Read Request
  79.            Big File Read Reply
  80.            Big File Write Request
  81.            Big File Write Reply
  82.       Connection Structures
  83.            Request by the Workstation
  84.            Reply by the File Server
  85.       Appendix B: TEST.BAT
  86.  
  87.      Acknowledgements
  88.  
  89.      This Application Note would not exist without the hard work and technical
  90.      expertise of many people both inside and outside of Novell. Thanks to
  91.      Therron Powell, who was instrumental in collecting and representing
  92.      performance testing data and results. Thanks also to Willie Tejada,
  93.      product line manager, counselor, confidant, and collaborator, who also
  94.      authored several of the original figures we modified for this AppNote.
  95.  
  96. Overview
  97.  
  98.      The Burst Mode protocol, formerly called "Packet Burst," is a new NetWare
  99.      Core Protocol (NCP) technology for expediting large file reads and writes
  100.      over wide area network links. It provides a sliding window-like dialogue
  101.      for IPX/NCP, and features an adaptive, self-tuning flow control
  102.      mechanism. Depending on your network and numerous other factors, you can
  103.      expect to see a performance improvement ranging anywhere between 10% and
  104.      300% with Burst Mode.
  105.  
  106.      This AppNote introduces the Burst Mode protocol and gives an overview of
  107.      the theory behind it. It defines the implementation of Burst Mode, the
  108.      workstation memory requirements and configuration parameters, and the
  109.      transmission rate control algorithm. It also discusses the performance
  110.      implications and reports on some performance tests conducted at various
  111.      Novell customer sites. For those interested in the technical details at
  112.      the packet level, we have also included a discussion of the packet
  113.      structure used for Burst Mode communication.
  114.  
  115. Traditional NCP Interaction Using IPX
  116.  
  117.      It is a common industry misconception that IPX is a half duplex
  118.      request/response protocol. Actually, IPX has always been a full duplex
  119.      protocol. The request/response nature of standard NetWare line traffic is
  120.      introduced by NCP at the upper layers of the protocol stack. Figure 1
  121.      illustrates the typical one-to-one request and response relationship
  122.      imposed by NCP.
  123.  
  124.       Figure 1: In a typical NCP interaction, each client request is answered
  125.      with a response acknowledgment from the server.
  126.  
  127.      Over wide area network (WAN) links, this one-to-one NCP request/response
  128.      relationship can result in performance degradation due to the "ping pong"
  129.      effect. As each side waits for a corresponding acknowledgment, there is a
  130.      significant amount of time when no traffic is being transmitted on the
  131.      line.
  132.  
  133.      The delay is compounded when large files are being transmitted a packet
  134.      at a time. In Figure 2, a client wants to read a 64KB file located on a
  135.      remote server that is accessible through a router and across a WAN link.
  136.      Since the maximum packet size for NetWare routers is 512 bytes, the
  137.      client and server must exchange 128 of these 512-byte packets to fulfill
  138.      the read request.
  139.  
  140.       Figure 2: Over WAN links, the request/response nature of NCP
  141.      interaction can cause performance degradation.
  142.  
  143. The Burst Mode Protocol
  144.  
  145.      NetWare's Burst Mode protocol allows a client to issue a single read or
  146.      write request for blocks of data up to 64KB in size. The data is
  147.      partitioned into appropriate packets, and these packets are transmitted
  148.      back-to-back on the line, as shown in Figure 3. No intervening
  149.      involvement by the sender or reply packets are required until after the
  150.      last of the "burst" packets is received.
  151.  
  152.       Figure 3: With Burst Mode, clients can have the server read or write
  153.      large blocks of data comprising multiple packets.
  154.  
  155.      The current implementation of Burst Mode requires:
  156.  
  157.      ■    The Burst Mode NLM (PBURST.NLM) to be loaded on the file server 
  158.  
  159.      ■    The Burst Mode shell (BNETX.COM) to be loaded on the workstation 
  160.  
  161.      ■    Adequate space in conventional memory at the workstation
  162.  
  163.      The amount of workstation memory needed is based on parameters specified
  164.      by the user in the NET.CFG file and the capability of the network
  165.      hardware media.
  166.  
  167.      The Burst Mode shell itself requires more conventional memory than
  168.      traditional NetWare shells■about 4-5KB minimum, plus memory for buffers.
  169.      The total amount of client memory consumed depends on (1) the number of
  170.      Burst Mode buffers configured for the workstation and (2) the packet size
  171.      negotiated with the file server.
  172.  
  173.      See the "Client Memory Requirements" section later in this AppNote for
  174.      more explanation of the memory requirements for Burst Mode clients.
  175.  
  176. Flow Control Mechanism
  177.  
  178.      To control the flow of data, Burst Mode employs a dual volume-throttling
  179.      mechanism that uses (1) an expanding and contracting window size
  180.      algorithm and (2) a packet transmission metering value.
  181.  
  182.      "Window size" refers to the number of frames or packets contained in a
  183.      single burst. This is one area in which Burst Mode's window technology
  184.      deviates from traditional sliding window protocols such as SDLC. In
  185.      standard windowing protocols, the window size is typically a fixed value;
  186.      that is, a fixed maximum number of packets (usually seven) can be
  187.      transmitted before a responding acknowledge packet must be received.
  188.  
  189.      With Novell's Burst Mode, the number of packets in the window is
  190.      variable, up to a theoretical maximum value of 128 (64KB divided by
  191.      512-byte packets).
  192.  
  193.      Burst Mode also uses a metering throttle technique in which the client
  194.      requests a certain time delay before individual packets are placed
  195.      back-to-back on the transmission media. This "gap time" is used to
  196.      prevent fast servers from overrunning the client's buffers.
  197.  
  198.      The actual values for these two parameters are determined individually by
  199.      each client on the network. To arrive at appropriate values, the client
  200.      shell executes a complex "transmission rate control" algorithm.
  201.  
  202.      This algorithm also allows these parameters to be dynamically changeable
  203.      during processing. The Burst Mode shell continually monitors line quality
  204.      (bad packets) and line capacity (missed packets) and renegotiates the
  205.      parameters accordingly, without the need for user intervention. When
  206.      network traffic is heavy enough that packets are dropped in transmission,
  207.      the Burst Mode shell decreases the window size to minimize packet loss.
  208.      Under less demanding network conditions, the shell increases the window
  209.      size to maximize performance. (See "How the Algorithm Works" later in
  210.      this AppNote for more details.)
  211.  
  212. Bad Packet Retransmission
  213.  
  214.      Another deviation from standard windowing protocols is Burst Mode's
  215.      ability to request retransmission of only those packets that are missing.
  216.      In standard windowing technologies, every packet after and including the
  217.      bad packet must be retransmitted. The ability to request only missing
  218.      data provides a significant performance benefit on poorer quality lines.
  219.  
  220.      Burst Mode Initialization
  221.  
  222.      The Burst Mode initialization process occurs when the client attaches to
  223.      the server. (The exact procedure is explained under "Setting Up a Burst
  224.      Mode Connection" later in this AppNote.)
  225.  
  226.      If a single client is concurrently attached to multiple servers, it will
  227.      use the Burst Mode NCP extensions with Burst Mode-enabled servers and use
  228.      the standard NCPs with non-Burst Mode servers. This mixed server
  229.      environment is illustrated in Figure 4.
  230.  
  231.       Figure 4: In a mixed server environment, a client will use Burst Mode
  232.      only with Burst Mode-enabled servers.
  233.  
  234.      Conversely, Burst Mode-enabled servers will use Burst Mode NCPs with
  235.      enabled clients and perform traditional non-Burst Mode NCP interaction
  236.      with standard workstation shells. This environment is illustrated in
  237.      Figure 5.
  238.  
  239.       Figure 5: In a mixed client environment, a Burst Mode-enabled server
  240.      replies with whatever protocol the client uses.
  241.  
  242. Burst Mode Theory
  243.  
  244.      Burst Mode is a special-purpose service protocol for read and write NCPs.
  245.      It is built on top of IPX; as such, it is similar to SPX in that it is a
  246.      connection-oriented protocol. As a special-purpose service, it has been
  247.      optimized to avoid the overhead of acknowledging the delivery of each
  248.      packet, as the SPX protocol must. To fully explain the theory behind this
  249.      protocol, we'll first define a few terms.
  250.  
  251.      Burst Mode communicates using multipacket units called bursts. The
  252.      packets that make up the burst are called fragments.  A burst includes:
  253.  
  254.      ■    The IPX headers for each packet
  255.  
  256.      ■    The Burst Mode headers for each packet
  257.  
  258.      ■    The request or reply, with or without data
  259.  
  260.      Theoretically, one burst may be up to 64KB in length. Figure 6
  261.      illustrates fragments and bursts.
  262.  
  263.       Figure 6: A burst is made up of fragments. A service transaction may
  264.      require one or more bursts to complete.
  265.  
  266.      A burst transaction occurs from the beginning of the burst request to the
  267.      end of the reply. For example, the burst transaction begins when a client
  268.      sends a request to read a file. The file server replies by sending a
  269.      series of packets (a burst) to the workstation, indicating the last
  270.      packet with an End Of Burst flag.
  271.  
  272.      When the client receives that last packet, the burst transaction is
  273.      complete, as long as there are no missing fragments. If fragments are
  274.      missing, the client sends a missing fragment list to the server, which
  275.      then retransmits only the missing fragments. This process repeats until
  276.      no missing fragments remain or until a timeout expires.
  277.  
  278.      A complete file read or write may require several burst transactions. A
  279.      service transaction (see Figure 6) is the completion of the entire
  280.      request, whether that entails just one burst and reply or many bursts and
  281.      the associated replies. In other words, if the client requests to read a
  282.      large file and the request requires many burst transaction transmittals,
  283.      the completion of all transmittals is a service transaction.
  284.  
  285.      Note that there is one End of Burst flag per burst, not per service
  286.      transaction.
  287.  
  288. Write and Read Requests
  289.  
  290.      The protocol differs slightly for write and read requests. Burst Mode is
  291.      a client/server protocol, so the client initiates both write and read
  292.      requests.
  293.  
  294.      Write Requests.  On write requests, the client does not wait for the
  295.      server to acknowledge the request to write. The client simply sends the
  296.      data with the write request, along with information about the starting
  297.      offset and the number of bytes being written. The server replies to the
  298.      client with an acknowledgement of success, or with a missing fragment
  299.      list. The server requests data only if it is missing.
  300.  
  301.      Read Requests.  On read requests, the client must wait, by default, for
  302.      the data. The server's reply to the request consists of the requested
  303.      data. Therefore, the client must determine whether the read was
  304.      successful or not. If the client received all the requested bytes, it
  305.      makes its next request, without an acknowledgement. But if there are
  306.      missing fragments, the client sends a system packet, which includes a
  307.      list of missing fragments, back to the server.
  308.  
  309. System Information
  310.  
  311.      In addition to exchanging data, there are situations when the server and
  312.      client need to exchange information about the data and its transmission.
  313.      This is called system information. It gives additional information about
  314.      the communication taking place, and is contained in a specific field in
  315.      the burst header structure. For example, the End Of Burst marker is a bit
  316.      in the system information field.
  317.  
  318.      The protocol's packet structure allows system information,
  319.      acknowledgement information, and burst data all to reside in one packet.
  320.      (See Appendix A for a description of the Burst Mode packet structure.)
  321.  
  322. Setting Up a Burst Mode Connection
  323.  
  324.      As mentioned in the overview, a workstation sets up a Burst Mode
  325.      connection with a file server at attach/login time. Once the Burst Mode
  326.      connection is established, it stays up as long as PBURST.NLM remains
  327.      loaded at the server and the Burst Mode shell is loaded at the
  328.      workstation.
  329.  
  330.      If the shell fails to make a Burst Mode connection during attach/login,
  331.      it uses normal NCPs to do the work. This ensures compatibility with
  332.      servers not running the Burst Mode NLM. Also, since Burst Mode is
  333.      established individually for each connection, it is possible for a client
  334.      to burst with one server while not bursting with another.
  335.  
  336.      Upon loading, the shell first determines whether the workstation has
  337.      enough memory for the requested number of Burst Mode buffers. (See "How
  338.      the Algorithm Works" for a discussion of memory requirements and the
  339.      implications of workstation speed and performance.) If there is enough
  340.      memory, the client proceeds to initiate a Burst Mode connection with the
  341.      server.
  342.  
  343.      During this connection process, the shell negotiates maximum burst sizes,
  344.      in the same fashion as it negotiates packet size, with each server
  345.      connected. The size of each fragment (packet in a burst) is the same as
  346.      the packet size negotiated for non-burst transmissions.
  347.  
  348.      If the workstation succeeds in setting up a Burst Mode connection with
  349.      the server at initialization, Burst Mode is not actually invoked until a
  350.      big read or write request is made.
  351.  
  352.      Once a Burst Mode connection is established between a workstation and a
  353.      given file server, the NetWare workstation shell automatically uses the
  354.      Burst Mode service whenever an application makes a read or write
  355.      involving more than 512 bytes of data. In other words, applications do
  356.      not have to be Burst Mode aware.
  357.  
  358. The Transmission Rate Control Algorithm
  359.  
  360.      Various factors influence the transmission rate of data on the network,
  361.      including:
  362.  
  363.      ■    The speed of the file server
  364.  
  365.      ■    The speed and available memory of the workstations
  366.  
  367.      ■    The speed and buffer size of the network media
  368.  
  369.      ■    The traffic on the network at transmission time
  370.  
  371.      A protocol such as Burst Mode must be sensitive to data-transmission
  372.      factors as well as to issues of interaction between host network
  373.      elements. For example, a fast file server could overwhelm a congested
  374.      bridge or slow workstation with a large stream of packets, resulting in
  375.      dropped packets. When the network becomes congested, a bursting
  376.      workstation must be able to give up a portion of the bandwidth it is
  377.      using and readjust to maximum bandwidth usage when it is available.
  378.  
  379.      Inasmuch as the client requests services from the server, the Burst Mode
  380.      flow control is governed completely by the client. There are two basic
  381.      considerations which relate directly to performance:
  382.  
  383.      ■    How should the protocol regulate the relationship between a fast
  384.           file server and a slow workstation? 
  385.      ■    How should the protocol use the maximum amount of bandwidth
  386.           available and yet not dominate the wire?
  387.  
  388.      The relationship between a fast file server and a slow workstation is
  389.      regulated by determining a minimum time between packet transmissions. The
  390.      bandwidth issue is regulated by an expanding and contracting burst window
  391.      size. The client determines both pieces of information.
  392.  
  393.      Flow control also requires regulating the current maximum burst size. For
  394.      example, the hardware may be capable of transmitting a 4KB burst, but
  395.      traffic on the network might indicate that transmissions should be
  396.      limited to 1KB bursts so as to not dominate the bandwidth.
  397.  
  398.      To maximize the fair and effective transmission rate in light of these
  399.      factors, the Burst Mode protocol uses a twofold transmission rate control
  400.      algorithm. The algorithm has two basic control elements:
  401.  
  402.      ■    Burst gap time, which governs the amount of time between packet
  403.           deliveries to the wire. 
  404.      ■    Burst window size, the amount of data that will be sent in the
  405.           current burst.
  406.  
  407. How the Algorithm Works
  408.  
  409.      Burst gap time is determined by taking the median of the time between
  410.      packet arrivals. (Gap time is not meaningful when bursts must cross a
  411.      bridge.)
  412.  
  413.      The minimum window size is based on the maximum physical packet size
  414.      negotiated for the network media and the number of Burst Mode (PB)
  415.      buffers configured for the workstation. As currently implemented, the
  416.      burst window size cannot fall below this number.
  417.  
  418.      The maximum burst window size is based on current network traffic
  419.      congestion conditions. Window size is regulated by successes and
  420.      failures; a timeout is considered a failure, as is a dropped packet.
  421.  
  422.      Note:     The window size fluctuation is based on research conducted by
  423.                Van Jacobson at UC/Berkeley.
  424.  
  425.      The gap time is established early on and stays relatively stable once
  426.      established. The data window size and the timeout values fluctuate much
  427.      more when the network is under a load.
  428.  
  429.      The following sections describe the logic of the transmission rate
  430.      control algorithm in more detail.
  431.  
  432. Setting the Number of Burst Mode Buffers
  433.  
  434.      Packet burst is enabled at the workstation by adding the following line
  435.      to the workstation's NET.CFG file:
  436.  
  437.          PB BUFFERS = n
  438.  
  439.      In this line, the variable n can be any number between 0 and 10. Setting
  440.      n = 0 disables Burst Mode. Setting n = 1 causes the shell to increase the
  441.      value up to the minimum of 2. If n > 10, the shell simply reduces the
  442.      number of buffers to 10, rather than returning an error to the user.
  443.      (Applications can read the actual PB BUFFER value with a new API. Refer
  444.      to Novell's API documentation for more details.)
  445.  
  446.      If the workstation doesn't have enough memory for the requested number of
  447.      buffers, the shell reduces the number of buffers accordingly, without
  448.      notifying the user.
  449.  
  450.      Increasing the number of Burst Mode buffers does not necessarily result
  451.      in better performance. For example, a slow machine cannot move data from
  452.      the hardware buffers to application memory fast enough, regardless of
  453.      whether you increase the value for n. Also, if a network card has
  454.      hardware receive buffers, the PB BUFFERS parameter could be set to a
  455.      higher number than for cards without hardware buffers. In both scenarios,
  456.      performance will actually degrade with the higher values.
  457.  
  458.      Perhaps the safest approach is to set the number of buffers low (for
  459.      example, PB BUFFERS = 2). This allows Burst Mode's flow control mechanism
  460.      to adaptively use more bandwidth if it is available, without running the
  461.      risk of overwhelming slow hardware.
  462.  
  463. Client Memory Requirements
  464.  
  465.      In the current implementation, Burst Mode requires conventional memory
  466.      space in the workstation. The amount of conventional memory, m, in bytes,
  467.      required for one packet burst buffer is:
  468.  
  469.          m = negotiated packet size + 102
  470.  
  471.      The negotiated packet size value is the size negotiated between the
  472.      NetWare client and file server. With Ethernet, for example, the
  473.      negotiated packet size might be 1,024 bytes (1KB). The constant 102 is
  474.      the total number of bytes needed for the IPX, NCP burst, and ECB headers.
  475.  
  476.      Thus the total memory M required for all packet burst buffers, in bytes,
  477.      is:
  478.  
  479.           M = pb buffers x m
  480.  
  481.      The value pb buffers is the number of Burst Mode buffers specified by the
  482.      user in the NET.CFG file, and m is the memory required for one packet
  483.      burst buffer, as calculated above.
  484.  
  485.      When the client receives a burst, the data is transferred from the
  486.      hardware to the workstation memory. Therefore, to maximize performance,
  487.      one must consider the speed of the workstation as well as the network
  488.      card being used. Performance optimization, however, will be largely a
  489.      matter of experimentation.
  490.  
  491. Determining Minimum and Maximum Window Size
  492.  
  493.      After figuring the maximum physical packet size and determining that
  494.      there is enough memory available at the workstation for the number of
  495.      Burst Mode buffers requested, the Burst Mode protocol determines a
  496.      minimum and maximum size for the Burst Mode data window.
  497.  
  498.      Note:     All adjustments to these parameters are made on a
  499.                burst-by-burst, as opposed to a packet-by-packet, basis.
  500.  
  501.      As stated previously, the minimum window size is based on the maximum
  502.      physical packet size negotiated for the network media and the number of
  503.      Burst Mode buffers configured for the workstation. The current
  504.      implementation of Burst Mode won't let the burst window size fall below
  505.      this number. The Burst Mode shell allows that minimum number of packets
  506.      to be transmitted regardless of network conditions. This is another
  507.      reason why it may be wiser to set the number of Burst Mode buffers at 2.
  508.  
  509.      The theoretical maximum window size is 64KB. Control of the current
  510.      maximum allowed window size is determined by the occurrence of successful
  511.      and unsuccessful burst transactions. (A successful burst transaction is
  512.      one with no dropped packets; an unsuccessful burst transaction has
  513.      dropped or missing packets.)
  514.  
  515.      ■    A successful burst transaction causes the window to increase in size
  516.           by 100 bytes. 
  517.  
  518.      ■    On the other hand, a burst with one or more dropped packets causes
  519.           the window to decrease to 7/8 of its current size.
  520.  
  521.      The window size value will not drop below the physical packet size
  522.      negotiated by NetWare and the network media (such as Token Ring or
  523.      Ethernet) multiplied by the number of Burst Mode buffers. In equation
  524.      form:
  525.  
  526.          Window Size ≥ negotiated packet size x pb buffers
  527.  
  528.      A slow workstation will determine a maximum window size based on whether
  529.      it ran out of Burst Mode receive buffers during the burst transaction.
  530.  
  531. Network Timeouts
  532.  
  533.      In addition to data window size and gap time, network timeouts (how long
  534.      a workstation waits before assuming that communication between the file
  535.      server and the workstation has been temporarily interrupted or severed)
  536.      are factored in to the rate control of Burst Mode. No response times less
  537.      than two 55ms ticks are factored in.
  538.  
  539.      Longer delays on the network (up to the maximum timeout set by the IPX
  540.      initialization code) are processed according to a formula for calculating
  541.      moving averages and moving deviations modeled by Van Jacobson. That
  542.      figure is used to indicate whether the timeouts should be extended to
  543.      some degree.
  544.  
  545. Performance Implications
  546.  
  547.      Due to the large number of variables involved (line speed/quality, client
  548.      capacity, server capacity, number of hops, number of buffers, and so on),
  549.      the exact performance improvement you can expect to achieve with Burst
  550.      Mode is difficult to predict. For the purposes of this AppNote, let's
  551.      define performance improvement as the difference between pre-Burst Mode
  552.      and post-Burst Mode response times for the completion of a single task.
  553.  
  554.      Intuitively, we would expect to see Burst Mode performance increase in
  555.      proportion to how much of a request/response bottleneck exists on the
  556.      communication line. In other words, it would seem that the greatest
  557.      benefit with Burst Mode should occur over slow lines (9600 bps and
  558.      slower).
  559.  
  560.      However, the actual benefit of using Burst Mode over 9600 bps (or slower)
  561.      lines is not as great as we might suppose. Consider the following
  562.      rationale.
  563.  
  564.      Assume you are transmitting 10-bit characters (8 bits + start and stop
  565.      bits) over a 9600 baud line. In this scenario, the number of seconds it
  566.      takes to transmit one character is:
  567.  
  568.          1/9600 x 10 = .00104 seconds per character
  569.  
  570.      Further, assume that the worst-case transmission delay for AT&T
  571.      land-based telephone lines is at most 1/40 (0.025) of a second. (This
  572.      accuracy is guaranteed by the United States Naval Observatory master
  573.      clock in Washington, D.C.)
  574.  
  575.      With this much delay, the first character placed on the line will reach
  576.      the other end of the line at about the same time that the 25th character
  577.      is being placed on the line:
  578.  
  579.          .025 sec ÷ .00104 chars/sec = 24.03 characters
  580.  
  581.      Since data packets are usually larger than 25 bytes in size, not even one
  582.      entire packet (let alone a series of full packets) can be placed on a
  583.      9600-baud line all at once. Of course, with Burst Mode, you eliminate the
  584.      need for the shorter, non-data protocol control packets for which the
  585.      sending side would normally have to wait for responses to come back from
  586.      the receiver. This alone results in a slight (5■15%) increase in
  587.      performance.
  588.  
  589.      More dramatic performance increases occur when more than one packet can
  590.      be placed on the line at the same time, because that allows several
  591.      packets in a burst to be "in transit" together. This is the case in two
  592.      types of situations:
  593.  
  594.      ■    When communicating over high-speed transmission lines (such as T1) 
  595.  
  596.      ■    When there are significant transmission delays between sender and
  597.           receiver
  598.  
  599.      The higher data transmission speeds typical of T1 lines makes it possible
  600.      for multiple packets to be placed on the physical line at the same time.
  601.      Combining T1 links with Burst Mode technology results in a performance
  602.      increase of around 100%.
  603.  
  604.      The next two figures illustrate network configurations in which
  605.      transmission delays are significant enough to allow more than one packet
  606.      to be in transit at the same time. The first configuration, shown in
  607.      Figure 7, is when the data must traverse multiple routers or bridges.
  608.  
  609.       Figure 7: Multiple hops through routers or bridges introduce enough
  610.      delay to allow multiple packets on the line at once.
  611.  
  612.      In this configuration, individual packets can occur on each separate
  613.      network segment, as well as in the routing/bridging devices.
  614.  
  615.      The second configuration is when communication occurs over X.25
  616.      packet-switched lines, as shown in Figure 8. Due to the nature of
  617.      packet-switching networks, they also allow many packets in a burst to be
  618.      on the end-to-end connection at once.
  619.  
  620.       Figure 8: Communication over packet-switching networks is typically
  621.      slow because of the multiple paths data can take.
  622.  
  623.      For the multiple-hop configurations, the performance increase can be up
  624.      to 300%. The greatest performance increase (near 400%) occurs when you
  625.      combine these configurations with a T1 link.
  626.  
  627.      In our testing, we also noted significant performance increases (up to
  628.      50%) in local Ethernet and Token Ring environments, even though both
  629.      protocols (CSMA/CD and Token Passing) support only one packet on the
  630.      media at a time. This performance boost is attributed to the fact that
  631.      with Burst Mode, the packets in a burst are transmitted as a unit. The
  632.      sender doesn't have to wait for an acknowledgment to be received for each
  633.      packet, as is the case in non-Burst Mode interaction.
  634.  
  635.      It is important to remember that Burst Mode is invoked only with read and
  636.      write requests for large chunks of data (greater than 512 bytes). If an
  637.      application on a Burst Mode-enabled system performs 80-byte data reads
  638.      and writes, the Burst Mode NCP calls will not be used. In this situation,
  639.      the application layer of the protocol stack implements a half duplex
  640.      request/response data transfer as explained in the overview.
  641.  
  642. Performance Testing
  643.  
  644.      The throughput test we used to measure Burst Mode performance is
  645.      straightforward and representative of those environments that stand to
  646.      benefit most from Burst Mode. The testing was performed via a standard
  647.      DOS batch file named TEST.BAT (listed in Appendix B). TEST.BAT performs
  648.      five sequential DOS copies from a server to a client of files that vary
  649.      in size from 100 bytes to 1,000,000 bytes (1MB). Before and after each
  650.      copy, the batch procedure takes time stamps and saves them to a log file
  651.      named OUT.LOG.
  652.  
  653.      To minimize the impact of potential disk I/O bottlenecks, the batch
  654.      procedure transfers files to the NULL device on the client. It then
  655.      discards the first time stamp taken for each sequence to minimize the
  656.      potential effect of server disk I/O during the initial file read.
  657.  
  658.      We calculated the percentage of performance increase as follows:
  659.  
  660.      Percent increase in performance =   (T1 - T2)   x 100
  661.                                          ─────────
  662.                                              T2
  663.      where:
  664.  
  665.                    End Time             Start Time
  666.           T1 =     (1MB file     -      (1MB file
  667.                  non-Burst Mode)      non-Burst Mode
  668.  
  669.                    End Time             Start Time
  670.           T2 =     (1MB file     -      (1MB file
  671.                  with Burst Mode)     with Burst Mode
  672.  
  673.      To obtain real-world performance numbers, we conducted the bulk of the
  674.      performance tests at Novell customer sites. This allowed us to test Burst
  675.      Mode on complicated topologies (multiple third-party bridges/routers,
  676.      satellite links, and so on) that were not available in a laboratory
  677.      environment. Many of these tests were conducted on actual production
  678.      networks.
  679.  
  680.      Although data results will invariably be affected by ancillary network
  681.      traffic, our original intent was to test real-world environments. Over
  682.      the long run, the impact of other network traffic on the non-Burst Mode
  683.      tests should even out with the Burst Mode results.
  684.  
  685. Performance Test Results
  686.  
  687.      As expected, smaller file transfers showed virtually no increase in
  688.      performance with Burst Mode (see Figure 9). Therefore, the remaining
  689.      figures report only the results for the 1MB file transfer to highlight
  690.      performance differences. Figure 10 shows the varying performance
  691.      increases for 14 test sites. Figure 11 highlights the performance
  692.      differences between 5 and 10 Burst Mode receive buffers in the
  693.      workstation.
  694.  
  695.           Figure 9: Burst Mode performance results for five different test
  696.           sites with various link types.
  697.  
  698.           Figure 10: Burst Mode performance results for other test sites.
  699.  
  700.           Figure 11: These two graphs show performance results with 5 and 10
  701.           Burst Mode receive buffers.
  702.  
  703.  
  704. Appendix A: Technical Information
  705.  
  706.      This appendix contains a technical description of the packet structure
  707.      and connection request structures used with the Burst Mode protocol. It
  708.      is mainly of interest to those interested in doing protocol analyzer
  709.      traces of Burst Mode communications.
  710.  
  711. Burst Packet Structure
  712.  
  713.      As seen on the network, a burst packet has the major fields shown in
  714.      Figure A-1.
  715.  
  716.       Figure A-1: On the network, a packet that includes Burst Mode
  717.      information looks like this.
  718.  
  719.      The following sections describe the Burst Mode portion of the packet in
  720.      more detail.
  721.  
  722. Burst Header Structure
  723.  
  724.      The header structure of the Burst Mode packet includes the fields shown
  725.      in Figure A-2.
  726.  
  727.       Figure A-2: The header of the Burst Mode portion of a packet.
  728.  
  729.      Here are definitions of the fields in the Burst Header portion of the
  730.      packet.
  731.  
  732.      File Server Packet Type. This is the primary file server packet type
  733.      code. For Burst Mode packets, this type code is 0x7777. The recognized
  734.      File Server Packet Type codes are:
  735.  
  736.      0x1111    Allocate Slot Request
  737.      0x2222    File Server Request (that is, an NCP request)
  738.      0x3333    File Server Reply (an NCP reply)
  739.      0x5555    Deallocate Slot Request
  740.      0x7777    Burst Mode Protocol Packet (big NCP request/reply)
  741.      0x9999    Positive Acknowledge
  742.  
  743.      Communication Control Bits. The next six fields are communication control
  744.      bits that are manipulated by the Burst Mode protocol directly, without
  745.      any application or user interaction. Note that the SAK and BSY fields
  746.      shown in Figure A-2 are currently reserved.
  747.  
  748.      Source Connection ID. This is a random number that uniquely identifies a
  749.      big connection from the sender's point of view. This number is typically
  750.      formed from the current time of day. The packet burst protocol does not
  751.      allow a connection ID of zero.
  752.  
  753.      Since burst packets could duplicate and circulate in bridges for quite a
  754.      while, especially on wide area networks, connection IDs help identify
  755.      packets that are no longer relevant. Hi-lo or lo-hi ordering does not
  756.      pertain to this value.
  757.  
  758.      Destination Connection ID. A random, nonzero number that uniquely
  759.      identifies a big connection from the receiver's point of view. See Source
  760.      Connection ID above.
  761.  
  762.      Packet Sequence Number. This number is incremented by one for each new
  763.      packet a node transmits per service transaction. In the packet, it is
  764.      kept in hi-lo format.
  765.  
  766.      Send Delay Time. This field contains the amount of time delay the
  767.      transmitter is using between packet transmissions. The delay is specified
  768.      in units of approximately 100 microseconds. In theory, this field is for
  769.      information only. This value is in hi-lo format.
  770.  
  771.      Burst Sequence Number. This is the burst number currently being
  772.      transmitted. In setting up a packet burst connection, two nodes begin by
  773.      zeroing their burst sequence numbers. The first burst each sends is
  774.      labeled zero; the nodes increment their burst sequence numbers with each
  775.      successive burst they send. This field contains the current burst
  776.      sequence number in hi-lo format.
  777.  
  778.      ACK Sequence Number. This field indicates the burst sequence number that
  779.      a node expects to receive next. When a node receives a packet, it can use
  780.      this field to tell whether the last burst it transmitted arrived
  781.      successfully at the destination. This value is in hi-lo format.
  782.  
  783.      Total Length of Outgoing Burst. This field specifies the total length in
  784.      bytes of the burst being transmitted. It is presented in hi-lo format.
  785.      One use for this field is for the receiver to establish a missing
  786.      fragment list as soon as it receives the first packet of a burst.
  787.  
  788.      Offset Into Burst Where This Packet's Data Go. This field is
  789.      self-explanatory. The value is in hi-lo format.
  790.  
  791.      Number of Burst Data Bytes In This Packet. This field is also
  792.      self-explanatory. It is in hi-lo format.
  793.  
  794.      Number of Entries in Missing Fragment List. This field specifies how many
  795.      elements (not bytes) are in the missing fragment list. The missing
  796.      fragment list, if any, follows this field. Zero is a valid number and
  797.      indicates that there are no missing fragments. This field is presented in
  798.      hi-lo format. The system bit should be set if this field is filled in.
  799.  
  800. Missing Fragment List
  801.  
  802.      The missing fragment list describes the parts of a burst that the local
  803.      node is still expecting to receive from the remote node. Initially, there
  804.      is basically one fragment that spans the whole burst. As parts of the
  805.      burst arrive, the size of this fragment is reduced.
  806.  
  807.      During reception, "holes" may form due to lost packets or packets
  808.      arriving out of sequence. When this happens, there will be more than one
  809.      fragment in the missing fragment list. The number of elements in the
  810.      missing fragment list is given in the header structure. (See the "Burst
  811.      Header Structure" section.)
  812.  
  813.      Figure A-3 shows the structure of one missing fragment list element.
  814.  
  815.       Figure A-3: An element of the missing fragments list.
  816.  
  817. Request Data
  818.  
  819.      The Request Data part of a burst packet contains the part of the burst
  820.      specified by the header structure. Bursts, taken as a whole, have their
  821.      own structure. The "Request and Reply Structures" section below includes
  822.      more detail.
  823.  
  824. Request and Reply Structures
  825.  
  826.      As shown in the "Burst Header Structure" section, the BIG_SEND_BURST
  827.      Stream Type in the Burst Mode header indicates support for "big NCP"
  828.      requests and replies. The following sections describe the request and
  829.      reply burst structures.
  830.  
  831. Big File Read Request
  832.  
  833.      Figure A-4 shows the request burst portion of the packet burst packet for
  834.      a big file read.
  835.  
  836.       Figure A-4: The request burst portion of the Burst Mode packet for a
  837.      big file read.
  838.  
  839. Big File Read Reply
  840.  
  841.      Figure A-5 shows the reply burst portion of the Burst Mode packet for a
  842.      big file read.
  843.  
  844.       Figure A-5: The reply burst portion of the Burst Mode packet for a big
  845.      file read.
  846.  
  847.      If an error occurs, only the result code returns. Result code values are:
  848.  
  849.      0      No error
  850.      1      Initial error
  851.      2      I/O error
  852.      3      No Data Read
  853.  
  854. Big File Write Request
  855.  
  856.      Figure A-6 shows the request burst portion of the Burst Mode packet for a
  857.      big file write.
  858.  
  859.       Figure A-6: The request burst portion of the Burst Mode packet for a
  860.      big file write.
  861.  
  862. Big File Write Reply
  863.  
  864.      Figure A-7 shows the reply burst portion of the Burst Mode packet for a
  865.      big file write.
  866.  
  867.       Figure A-7: The reply burst part of the Burst Mode packet for a big
  868.      file write.
  869.  
  870.      The Result Code values are:
  871.  
  872.      0         No error
  873.      4         Write Error
  874.  
  875.      Write errors occur only if the disk is completely out of space. If a
  876.      write to a bad disk segment is attempted, Novell Hot Fix finds suitable
  877.      disk space elsewhere; the server will always write if there is room.
  878.  
  879. Connection Structures
  880.  
  881.      Here is the sequence of events that occur between the client and the
  882.      server when attempting to make a Burst Mode connection:
  883.  
  884.      1.   The workstation and server synchronize (set to zero) the packet and
  885.           burst sequence numbers.
  886.  
  887.      2.   They exchange Burst Mode connection IDs.
  888.  
  889.      3.   The workstation tells the server the dynamic IPX socket number it is
  890.           using for Burst Mode communication.
  891.  
  892.      4.   The two sides exchange information about the maximum sizes of
  893.           packets and bursts each can handle; both use the smaller packet and
  894.           burst size of the two.
  895.  
  896.      The next two sections detail the structures used during a Burst Mode
  897.      client's initial connection request and the file server's reply to that
  898.      request.
  899.  
  900. Request by the Workstation
  901.  
  902.      The following table details the initial workstation NCP packet burst
  903.      request structure (0x2222 101 = Burst Mode Connection Request Function).
  904.  
  905.      Offset    Content                                  Type
  906.      0         RequestType (0x2222)                      word
  907.      2         SequenceNumber (LastSequence + 1)         byte
  908.      3         ConnectionNumber (Service Connection)     byte
  909.      4         TaskNumber (Current Task Number)          byte
  910.      5         Reserved (0)                              byte
  911.      6         Function Code (101)                       byte
  912.      7         LocalConnectionID (random)                long
  913.      11        LocalMaxPacketSize (hi-lo format)         long
  914.      15        LocalTargetSocket (from IPX open socket)  word
  915.      17        LocalMaxSendSize (hi-lo format)           long
  916.      21        LocalMaxRecvSize (hi-lo format)           long
  917.  
  918.      LocalMaxPacketSize is a number returned by IPX function 1Ah. It is the
  919.      number of data bytes that a physical packet will hold, excluding
  920.      MAC-layer bytes.
  921.  
  922.      LocalMaxSendSize and LocalMaxRecvSize specify maximum burst sizes.
  923.  
  924. Reply by the File Server
  925.  
  926.      The table below shows the structure of a file server's reply to a Burst
  927.      Mode connection request.
  928.  
  929.      Offset    Content                                      Type 
  930.      0         ReplyType (0x3333)                           word
  931.      2         SequenceNumber (Request Sequence Number)     byte
  932.      3         ConnectionNumber (Service Connection)        byte
  933.      4         TaskNumber (Client Task Number)              byte
  934.      5         Reserved (0)                                 byte
  935.      6         Completion Code (0)                          byte
  936.      7         RemoteTargetID (random big connection ID)    long
  937.      11        RemoteMaxPacketSize (hi-lo format)           long
  938.      15        RemoteMaxSendSize (hi-lo format)             long
  939.      19        RemoteMaxRecvSize (hi-lo format)             long
  940.  
  941.      RemoteMaxPacketSize is the server counterpart of the LocalMaxPacketSize
  942.      in the request packet.
  943.  
  944.      RemoteMaxSendSize and RemoteMaxRecvSize specify maximum burst sizes from
  945.      the server's point of view.
  946.  
  947. Appendix B: TEST.BAT
  948.  
  949.      This appendix is a listing of the TEST.BAT file used to test Burst Mode
  950.      performance. The three command line parameters are the input file name
  951.      and path, the output file path, and an optional comment. For example:
  952.  
  953.      TEST X:/PATH.NAM C: Site-A
  954.  
  955.      ECHO %1  IS THE INPUT FILE >> OUT.LOG
  956.      ECHO %2 IS THE OUTPUT FILE >> OUT.LOG
  957.      ECHO %3 >> OUT.LOG
  958.      ECHO ON
  959.  
  960.      ECHO    COPY A 100 BYTE FILE 5 TIMES  >> OUT.LOG
  961.      ECHO COPY A 100 BYTE FILE 5 TIMES
  962.      ECHO FIRST COPY >> OUT.LOG
  963.      TIME < CR.TXT >> OUT.LOG
  964.      COPY %1\ONEHUN NUL
  965.      TIME < CR.TXT >> OUT.LOG
  966.      ECHO SECOND COPY >> OUT.LOG
  967.      TIME < CR.TXT >> OUT.LOG
  968.      COPY %1\ONEHUN NUL
  969.      TIME < CR.TXT >> OUT.LOG
  970.      ECHO THIRD COPY >> OUT.LOG
  971.      TIME < CR.TXT >> OUT.LOG
  972.      COPY %1\ONEHUN NUL
  973.      TIME < CR.TXT >> OUT.LOG
  974.      ECHO FOURTH COPY >> OUT.LOG
  975.      TIME < CR.TXT >> OUT.LOG
  976.      COPY %1\ONEHUN NUL
  977.      TIME < CR.TXT >> OUT.LOG
  978.      ECHO FIFTH COPY >> OUT.LOG
  979.      TIME < CR.TXT >> OUT.LOG
  980.      COPY %1\ONEHUN NUL
  981.      TIME < CR.TXT >> OUT.LOG
  982.      ECHO * >> OUT.LOG
  983.      ECHO * >> OUT.LOG
  984.      ECHO * >> OUT.LOG
  985.  
  986.      ECHO    COPY A 1000 BYTE FILE 5 TIMES  >> OUT.LOG
  987.      ECHO COPY A 1000 BYTE FILE 5 TIMES
  988.      ECHO FIRST COPY
  989.      TIME < CR.TXT >> OUT.LOG
  990.      COPY %1\ONETHOU NUL
  991.      TIME < CR.TXT >> OUT.LOG
  992.      ECHO SECOND COPY >> OUT.LOG
  993.      TIME < CR.TXT >> OUT.LOG
  994.      COPY %1\ONETHOU NUL
  995.      TIME < CR.TXT >> OUT.LOG
  996.      ECHO THIRD COPY >> OUT.LOG
  997.      TIME < CR.TXT >> OUT.LOG
  998.      COPY %1\ONETHOU NUL
  999.      TIME < CR.TXT >> OUT.LOG
  1000.      ECHO FOURTH COPY >> OUT.LOG
  1001.      TIME < CR.TXT >> OUT.LOG
  1002.      COPY %1\ONETHOU NUL
  1003.      TIME < CR.TXT >> OUT.LOG
  1004.      ECHO FIFTH COPY >> OUT.LOG
  1005.      TIME < CR.TXT >> OUT.LOG
  1006.      COPY %1\ONETHOU NUL
  1007.      TIME < CR.TXT >> OUT.LOG
  1008.      ECHO * >> OUT.LOG
  1009.      ECHO * >> OUT.LOG
  1010.      ECHO * >> OUT.LOG
  1011.  
  1012.      ECHO    COPY A 10,000 BYTE FILE 5 TIMES  >> OUT.LOG
  1013.      ECHO COPY A 10,000  BYTE FILE 5 TIMES
  1014.      ECHO FIRST COPY
  1015.      TIME < CR.TXT >> OUT.LOG
  1016.      COPY %1\TENTHOU NUL
  1017.      TIME < CR.TXT >> OUT.LOG
  1018.      ECHO SECOND COPY >> OUT.LOG
  1019.      TIME < CR.TXT >> OUT.LOG
  1020.      COPY %1\TENTHOU NUL
  1021.      TIME < CR.TXT >> OUT.LOG
  1022.      ECHO THIRD COPY >> OUT.LOG
  1023.      TIME < CR.TXT >> OUT.LOG
  1024.      COPY %1\TENTHOU NUL
  1025.      TIME < CR.TXT >> OUT.LOG
  1026.      ECHO FOURTH COPY >> OUT.LOG
  1027.      TIME < CR.TXT >> OUT.LOG
  1028.      COPY %1\TENTHOU NUL
  1029.      TIME < CR.TXT >> OUT.LOG
  1030.      ECHO FIFTH COPY >> OUT.LOG
  1031.      TIME < CR.TXT >> OUT.LOG
  1032.      COPY %1\TENTHOU NUL
  1033.      TIME < CR.TXT >> OUT.LOG
  1034.      ECHO * >> OUT.LOG
  1035.      ECHO * >> OUT.LOG
  1036.      ECHO * >> OUT.LOG
  1037.      
  1038.      ECHO    COPY A 100,000 BYTE FILE 5 TIMES  >> OUT.LOG
  1039.      ECHO COPY A 100,000 BYTE FILE 5 TIMES
  1040.      ECHO FIRST COPY
  1041.      TIME < CR.TXT >> OUT.LOG
  1042.      COPY %1\HUNTHOU NUL
  1043.      TIME < CR.TXT >> OUT.LOG
  1044.      ECHO SECOND COPY >> OUT.LOG
  1045.      TIME < CR.TXT >> OUT.LOG
  1046.      COPY %1\HUNTHOU NUL
  1047.      TIME < CR.TXT >> OUT.LOG
  1048.      ECHO THIRD COPY >> OUT.LOG
  1049.      TIME < CR.TXT >> OUT.LOG
  1050.      COPY %1\HUNTHOU NUL
  1051.      TIME < CR.TXT >> OUT.LOG
  1052.      ECHO FOURTH COPY >> OUT.LOG
  1053.      TIME < CR.TXT >> OUT.LOG
  1054.      COPY %1\HUNTHOU NUL
  1055.      TIME < CR.TXT >> OUT.LOG
  1056.      ECHO FIFTH COPY >> OUT.LOG
  1057.      TIME < CR.TXT >> OUT.LOG
  1058.      COPY %1\HUNTHOU NUL
  1059.      TIME < CR.TXT >> OUT.LOG
  1060.      ECHO * >> OUT.LOG
  1061.      ECHO * >> OUT.LOG
  1062.      ECHO * >> OUT.LOG
  1063.      
  1064.      ECHO    COPY A 1,000,000 BYTE FILE 5 TIMES  >> OUT.LOG
  1065.      ECHO COPY A 1,000,000 BYTE FILE 5 TIMES
  1066.      ECHO FIRST COPY >> OUT.LOG
  1067.      TIME < CR.TXT >> OUT.LOG
  1068.      COPY %1\ONEMEG NUL
  1069.      TIME < CR.TXT >> OUT.LOG
  1070.      ECHO SECOND COPY >> OUT.LOG
  1071.      TIME < CR.TXT >> OUT.LOG
  1072.      COPY %1\ONEMEG NUL
  1073.      TIME < CR.TXT >> OUT.LOG
  1074.      ECHO THIRD COPY >> OUT.LOG
  1075.      TIME < CR.TXT >> OUT.LOG
  1076.      COPY %1\ONEMEG NUL
  1077.      TIME < CR.TXT >> OUT.LOG
  1078.      ECHO FOURTH COPY >> OUT.LOG
  1079.      TIME < CR.TXT >> OUT.LOG
  1080.      COPY %1\ONEMEG NUL
  1081.      TIME < CR.TXT >> OUT.LOG
  1082.      ECHO FIFTH COPY >> OUT.LOG
  1083.      TIME < CR.TXT >> OUT.LOG
  1084.      COPY %1\ONEMEG NUL
  1085.      TIME < CR.TXT >> OUT.LOG
  1086.      ECHO * >> OUT.LOG
  1087.      ECHO * >> OUT.LOG
  1088.      ECHO * >> OUT.LOG
  1089.